package com.zenithmind.chat.pojo.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.zenithmind.common.base.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.time.LocalDateTime;

/**
 * 聊天消息统计信息实体类 - 遵循单一职责原则
 * 专门负责消息的统计和状态信息
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("chat_message_statistics")
public class ChatMessageStatistics extends BaseEntity {

    /**
     * 消息ID
     */
    private String messageId;

    /**
     * 用户ID
     */
    private String userId;

    /**
     * 群组ID
     */
    private String groupId;

    /**
     * 已读用户数
     */
    private Integer readCount;

    /**
     * 点赞数
     */
    private Integer likeCount;

    /**
     * 回复数
     */
    private Integer replyCount;

    /**
     * 转发数
     */
    private Integer forwardCount;

    /**
     * 分享数
     */
    private Integer shareCount;

    /**
     * 收藏数
     */
    private Integer favoriteCount;

    /**
     * 举报数
     */
    private Integer reportCount;



    /**
     * 是否置顶（0-否，1-是）
     */
    private Integer isPinned;

    /**
     * 置顶时间
     */
    private LocalDateTime pinTime;

    /**
     * 置顶操作者ID
     */
    private String pinnedBy;

    /**
     * 撤回时间
     */
    private LocalDateTime recallTime;

    /**
     * 撤回原因
     */
    private String recallReason;

    /**
     * 撤回操作者ID
     */
    private String recalledBy;

    /**
     * 最后更新统计时间
     */
    private LocalDateTime lastStatisticsUpdate;

    /**
     * 扩展统计信息（JSON格式）
     */
    private String extraStatistics;

    /**
     * 增加已读数
     */
    public void incrementReadCount() {
        this.readCount = (this.readCount == null ? 0 : this.readCount) + 1;
    }

    /**
     * 增加点赞数
     */
    public void incrementLikeCount() {
        this.likeCount = (this.likeCount == null ? 0 : this.likeCount) + 1;
    }

    /**
     * 减少点赞数
     */
    public void decrementLikeCount() {
        this.likeCount = Math.max(0, (this.likeCount == null ? 0 : this.likeCount) - 1);
    }

    /**
     * 增加回复数
     */
    public void incrementReplyCount() {
        this.replyCount = (this.replyCount == null ? 0 : this.replyCount) + 1;
    }

    /**
     * 增加转发数
     */
    public void incrementForwardCount() {
        this.forwardCount = (this.forwardCount == null ? 0 : this.forwardCount) + 1;
    }

    /**
     * 检查是否已置顶
     * 
     * @return 是否已置顶
     */
    public boolean isPinnedMessage() {
        return isPinned != null && isPinned == 1;
    }

    /**
     * 检查是否已撤回
     * 
     * @return 是否已撤回
     */
    public boolean isRecalled() {
        return recallTime != null;
    }
}
